/*
 * Projeto Casamento
 * 
 * Versao: 0.0.1
 * Autor: Cristiano Lima
 * Data: 01/11/2012
 * 
 * Copyright (C) 2012-2013
 */
package casamento.controle;

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.component.UIComponent;
import javax.faces.component.UIInput;
import javax.faces.context.FacesContext;
import javax.faces.model.SelectItem;

import org.primefaces.event.CellEditEvent;

import casamento.Bean.ClienteBean;
import casamento.DAO.ClienteDAO;
import casamento.util.BuscarPorCEP;
import casamento.util.CepWebService;
import casamento.util.Validar;

/**
 * Classe que controla os clientes.
 * 
 * @author Cristiano Lima
 * 
 */
@ManagedBean(name = "clienteMB")
@SessionScoped
public class ClienteMB {

	ClienteBean cliente = new ClienteBean();
	ClienteBean mostrarCliente = new ClienteBean();
	ClienteDAO dao = new ClienteDAO();
	List<ClienteBean> listaClientes = new ArrayList<ClienteBean>();
	List<ClienteBean> filterClientes = new ArrayList<ClienteBean>();
	CepWebService cepWebService;
	List<SelectItem> ufs;
	
	/**
	 * construtor
	 */
	public ClienteMB() {
		cliente = new ClienteBean();
	}
	
	/**
     * método responsavél por salvar cliente na TbCliente.
     * 
     */
	public void salvar() {

		boolean verifica;
		Validar valida = new Validar();
		verifica = valida.validarCliente(cliente);

		if (verifica == true) {
			dao.inserir(cliente);
			cliente = new ClienteBean();
			FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO,
					"Cliente Cadastrado com Sucesso.",
					"Cliente Cadastrado com Sucesso.");
			FacesContext.getCurrentInstance().addMessage(null, message);

		} else {
			FacesMessage message = new FacesMessage(
					FacesMessage.SEVERITY_ERROR,
					"Há campos obrigatórios a serem preenchidos.",
					"Há campos obrigatórios a serem preenchidos");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
	}
	
	/**
     * método responsavél por alterar cliente na TbCliente.
	 * @throws SQLException 
	 * @throws ClassNotFoundException 
     * 
     */
	public void alterar(CellEditEvent event) throws ClassNotFoundException, SQLException {
		
		Object oldValue = event.getOldValue();  
	    Object newValue = event.getNewValue();  
		
		UIComponent form = (UIComponent) event.getColumn();
		UIComponent component = event.getComponent();
		UIInput input= (UIInput) component.findComponent("hiddenId");
		
		Integer id = (Integer) input.getValue();
		String valor = (String) event.getNewValue();
		dao.alterarCliente(form.getId(), valor, id);
		
		  if(newValue != null && !newValue.equals(oldValue)) {  
	            FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Valor alterado com sucesso.", "Valor antigo: " + oldValue + ", Novo Valor:" + newValue);  
	            FacesContext.getCurrentInstance().addMessage(null, msg);  
	        }  
	}

	/**
     * método responsavél por listar todos cliente.
     * 
     */
	public String listar() {

		listaClientes = dao.lista();

		return "/cadastro/listaClientes.xhtml?faces-redirect=true";
	}
	
	/**
     * método responsavél por buscar o endereço pelo CEP.
     * 
     */
	public void buscarEndereco() {

		if (!cliente.getCep().equals("") && cliente.getCep() != null) {
			BuscarPorCEP BuscarCep = new BuscarPorCEP();
			cepWebService = BuscarCep.busca(cliente.getCep());
			cliente.setBairro(cepWebService.getBairro());
			cliente.setCidade(cepWebService.getCidade());
			cliente.setRua(cepWebService.getLogradouro());
		} else {
			FacesMessage message = new FacesMessage(
					FacesMessage.SEVERITY_ERROR,
					"É necessário preencher campo CEP pra executar a Busca.",
					"É necessário preencher campo CEP pra executar a Busca.");
			FacesContext.getCurrentInstance().addMessage(null, message);
		}
	}

	/**
	 * Getter para cliente.
	 *
	 * @return cliente
	 */
	public ClienteBean getCliente() {
		return cliente;
	}
	
	/**
	 * Setter para cliente.
	 *
	 * @param cliente cliente
	 */
	public void setCliente(ClienteBean cliente) {
		this.cliente = cliente;
	}
	
	/**
	 * Getter para listaClientes.
	 *
	 * @return listaClientes
	 */
	public List<ClienteBean> getListaClientes() {
		return listaClientes;
	}
	
	/**
	 * Setter para listaClientes.
	 *
	 * @param listaClientes listaClientes
	 */
	public void setListaClientes(List<ClienteBean> listaClientes) {
		this.listaClientes = listaClientes;
	}
	
	/**
	 * Getter para filterClientes.
	 *
	 * @return filterClientes
	 */
	public List<ClienteBean> getFilterClientes() {
		return filterClientes;
	}
	
	/**
	 * Setter para filterClientes.
	 *
	 * @param filterClientes filterClientes
	 */
	public void setFilterClientes(List<ClienteBean> filterClientes) {
		this.filterClientes = filterClientes;
	}
	
	/**
	 * Getter para mostrarCliente.
	 *
	 * @return mostrarCliente
	 */
	public ClienteBean getMostrarCliente() {
		return mostrarCliente;
	}
	
	/**
	 * Setter para mostrarCliente.
	 *
	 * @param mostrarCliente mostrarCliente
	 */
	public void setMostrarCliente(ClienteBean mostrarCliente) {
		this.mostrarCliente = mostrarCliente;
	}
	
	/**
	 * Getter para cepWebService.
	 *
	 * @return cepWebService
	 */
	public CepWebService getCepWebService() {
		return cepWebService;
	}
	
	/**
	 * Setter para cepWebService.
	 *
	 * @param cepWebService cepWebService
	 */
	public void setCepWebService(CepWebService cepWebService) {
		this.cepWebService = cepWebService;
	}

	/**
	 * Getter para ufs.
	 * @return ufs
	 */
	public List<SelectItem> getUfs() {
		
		ufs = new ArrayList<SelectItem>();
		ufs.add(new SelectItem("Acre", "AC"));
		ufs.add(new SelectItem("Alagoas", "AL"));
		ufs.add(new SelectItem("Amapa", "AP"));
		ufs.add(new SelectItem("Amazonas", "AM"));
		ufs.add(new SelectItem("Bahia", "BA"));
		ufs.add(new SelectItem("Ceara", "CE"));
		ufs.add(new SelectItem("Distrito Federal", "DF"));
		ufs.add(new SelectItem("Esperito Santo", "ES"));
		ufs.add(new SelectItem("Goias", "GO"));
		ufs.add(new SelectItem("Maranhao", "MA"));
		ufs.add(new SelectItem("Mato Grosso", "MT"));
		ufs.add(new SelectItem("Mato Grosso do Sul", "MS"));
		ufs.add(new SelectItem("Minas Gerias", "MG"));
		ufs.add(new SelectItem("Para", "PA"));
		ufs.add(new SelectItem("Paraiba", "PB"));
		ufs.add(new SelectItem("Parana", "PR"));
		ufs.add(new SelectItem("Pernambuco", "PE"));
		ufs.add(new SelectItem("Piaui", "PI"));
		ufs.add(new SelectItem("Rio de Janeiro", "RJ"));
		ufs.add(new SelectItem("Rio Grande do Norte", "RN"));
		ufs.add(new SelectItem("Rio Grande do Sul", "RS"));
		ufs.add(new SelectItem("Rondonia", "RO"));
		ufs.add(new SelectItem("Roraima", "RR"));
		ufs.add(new SelectItem("Santa Catarina", "SC"));
		ufs.add(new SelectItem("Sao Paulo", "SP"));
		ufs.add(new SelectItem("Sergipe", "SE"));
		ufs.add(new SelectItem("Tocantis", "TO"));
		
		return ufs;
	}
}
